package model

import (
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type Book struct {
	gorm.Model           // 自动给表添加ID、CreatedAt、UpdatedAt、DeletedAt
	Title        string  `gorm:"size:50;unique;not null"`
	Price        float64 `gorm:"type:decimal(7, 2);default 0"`
	Pub          string  `gorm:"size:50"`
	Market_price float64 `gorm:"type:decimal(7, 2);default 0"`
}

func (b Book) TableName() string {
	return "book"
}

// 声明变量，用于保存创建的连接
var db *gorm.DB

// 初始化执行
func init() {
	dsn := "root:123456@tcp(192.168.88.11:3306)/gorm_test?charset=utf8mb4&parseTime=True&loc=Local"
	var err error
	db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{}) //连接数据库
	if err != nil {
		panic(err)
	}
	fmt.Println("连接成功")
}

// 查询所有的图书数据
func AllBook() ([]Book, error) {
	var books []Book
	err := db.Find(&books).Error
	if err != nil { // 如果查询失败
		return nil, err
	}
	// 否则查询成功
	return books, nil
}

// 插入图书
func AddBook(book Book) error {
	err := db.Create(&book).Error
	if err != nil {
		return err
	}
	return nil
}

// 通过ID查询图书
func SelectBookByID(id string) (Book, error) {
	var book Book
	err := db.Where("id = ?", id).First(&book).Error
	return book, err
}

// 修改图书
func UpdateBook(book Book) error {
	err := db.Save(&book).Error
	return err
}

// 删除图书
func DeleteBook(id string) (int64, error) {
	// 查询id对应的图书数据
	// err := db.Where("id = ?", id).Unscoped().Delete(&Book{}).Error
	// return err
	var book Book
	err := db.Where("id = ?", id).First(&book).Error // 查询是否成功
	if err != nil {
		return 0, err
	}
	result := db.Unscoped().Delete(&book)
	err = result.Error // 删除是否成功
	if err != nil {
		return 0, err
	}
	count := result.RowsAffected // 删除的数量
	return count, nil
}
